package cc.rengu.igas.acct.core.service.base;

import cc.rengu.oltp.service.base.BizBaseService;
import cc.rengu.oltp.service.model.BizResponse;
import cc.rengu.oltp.service.model.RiskMonitorInfo;
import cc.rengu.oltp.utility.annotation.BIZ_AFTER;
import cc.rengu.oltp.utility.annotation.BIZ_BEFORE;
import cc.rengu.oltp.utility.annotation.BIZ_PROCESS;

/**
 * Created by 王成 on 2020/3/5
 *
 * @author 王成
 */

@SuppressWarnings("rawtypes")
public abstract class BaseManageService extends BizBaseService {
    @Override
    protected Object beforeBizProcess() throws Exception {
        /* Step1：业务调用前公共处理 */

        /* Step2：查找BIZ_BEFORE的注解 */
        invokeBizAnnoMethod(BIZ_BEFORE.class);

        /* Step3：业务调用前客户化处理 */
        return bizBeforeCust();
    }

    @Override
    protected BizResponse callBizService(Object request) throws Exception {
        /* Step1：公共业务处理 */

        /* Step2：查找BIZ_PROCESS的注解 */
        invokeBizAnnoMethod(BIZ_PROCESS.class);

        /* Step3：业务逻辑处理 */
        return bizProcessCust(request);
    }

    @Override
    protected void afterBizProcess(BizResponse response) throws Exception {
        /* Step1：业务调用后公共处理*/

        /* Step2：查找BIZ_AFTER的注解 */
        invokeBizAnnoMethod(BIZ_AFTER.class);

        /* Step3：业务调用后客户化处理 */
        bizAfterCust(response);
    }

    @Override
    protected RiskMonitorInfo getRiskMonitorInfo() {
        return null;
    }

    /**
     * 业务处理前客户化处理
     *
     * @return 业务处理实体类
     * @throws Exception 抛出通用异常
     */
    protected abstract Object bizBeforeCust() throws Exception;

    /**
     * 业务逻辑处理客户化处理
     *
     * @param request 业务处理前的返回实体类
     * @return 业务处理结果
     * @throws Exception 抛出通用异常
     */
    protected abstract BizResponse bizProcessCust(Object request) throws Exception;

    /**
     * 业务处理后逻辑处理
     *
     * @param response 业务调用响应信息
     * @throws Exception 抛出通用异常
     */
    protected abstract void bizAfterCust(Object response) throws Exception;
}
